package com.itbbfx.controller.pharmacymanager;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itbbfx.entity.*;
import com.itbbfx.service.department.UnitService;
import com.itbbfx.service.pharmacymanager.DrugdictionaryService;
import com.itbbfx.service.pharmacymanager.PharmacyService;
import com.itbbfx.service.pharmacymanager.RecordService;
import com.itbbfx.service.pharmacymanager.TypeService;
import com.itbbfx.service.register.CTakeService;
import com.itbbfx.service.register.CcashierService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("medicine")
public class DomedicineController {
    @Autowired
    private UnitService unitService;
    @Autowired
    private TypeService typeService; //
    @Autowired
    private DrugdictionaryService sdrugdictionaryService;
    @Autowired
    private PharmacyService pharmacyService;
    @Autowired
    private RecordService rs;
    @Autowired
    private CTakeService cTakeService; //
    @Autowired
    private CcashierService cCashierService; //

    //计量单位
    /*
     * 查询计量单位
     * */
    @RequestMapping("findAllUnit")
    public Object UnitList(Unit unit, Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<Unit> listAll = unitService.findAllUnit(unit);
        PageInfo pageInfo = new PageInfo(listAll);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());

        return tableData;
    }

    /*
     * 添加计量单位
     * */
    @RequestMapping("addUnit")
    public Object addUnit(Unit unit) {
        int count = unitService.count(unit);
        if (count == 0) {
            int i = unitService.addUnit(unit);
            if (i == 1) {
                return "添加成功";
            } else {
                return "添加失败";
            }
        } else {
            return unit.getUnitName() + "已存在";
        }

    }

    /*
     * 删除计量单位
     * */
    @RequestMapping("deleteUnit")
    public Object deleteUnit(Integer unitId) {
        return unitService.deleteUnit(unitId);
    }

    /*@RequestMapping("allType")
    public Object allType() {
        return typeService.findAllType(new Type());
    }*/

    //   药品类型
    /*
     * 查询药品类型
     * */
    @RequestMapping("findAllType")
    public Object TypeList(Type type, Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<Type> listAll = typeService.findAllType(type);
        PageInfo pageInfo = new PageInfo(listAll);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条);
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());

        return tableData;
    }

    /*
     * 添加药品类型
     * */
    @RequestMapping("addType")
    public Object addType(Type type) {
        int count = typeService.count(type);
        if (count == 0) {
            int i = typeService.addType(type);
            if (i == 1) {
                return "添加成功";
            } else {
                return "添加失败";
            }
        } else {
            return type.getTypeName() + "已存在";
        }

    }

    /*
     * 删除药品类型
     * */
    @RequestMapping("deleteType")
    public String deleteType(Integer typeId) {
        return typeService.deleteType(typeId);
    }

    //    药品详情
//查询药品仓库
    @RequestMapping("selectpharmacy")
    public Object selectpharmary(Ypharmacy ypharmacy, Integer page, Integer limit) {
        System.out.print("进去查询药房方法");
        PageHelper.startPage(page, limit);
        List<Ypharmacy> drugstores = pharmacyService.selpharmacy(ypharmacy);
        PageInfo pageInfo = new PageInfo(drugstores);
        Map<String, Object> drugstoresData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式
        drugstoresData.put("code", 0);
        drugstoresData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        drugstoresData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        drugstoresData.put("data", pageInfo.getList());
        return drugstoresData;
    }

    //添加一条药品采到报缺单
    @RequestMapping("addbaoque")
    public Integer addbaoque(Baoque baoque) {
        Integer selbaoqueName = pharmacyService.selbaoqueName(baoque);//查询报缺单是否已经有此条药品
        if (selbaoqueName == 0) {
            int addbaoque = pharmacyService.addbaoque(baoque);//添加药品
            return addbaoque;
        } else {
            int upbaoquenum = pharmacyService.upbaoquenum(baoque);//修改药品数量
            return upbaoquenum;
        }

    }

    @RequestMapping("delpharymary")
    public Integer delpharymary(Ypharmacy ypharmacy, Huishou huishou) {
        //删除药房此药（回收给库房）
        System.out.println("进入回收");
        int delpharymacy = pharmacyService.delpharymacy(ypharmacy);
        if (delpharymacy == 1) {
            pharmacyService.addhuishou(huishou);
        }
        System.out.println(delpharymacy);
        return delpharymacy;
    }

    //    @RequestMapping("toAddpharymacy")
//    public String toAddpharymacy(Model model){
//        List<Ypharmacy> list = pharmacyService.selectall();
//        model.addAttribute("addlist",list);
//        return "drugstore/c_addpharmacy";
//    }
    @RequestMapping("addpharmacy")
    public String addpharmacy(Ypharmacy ypharmacy) {
        System.out.println("yyyy===============>" + ypharmacy.toString());
        pharmacyService.addPharmacy(ypharmacy);
        return "drugstore/c_pharmacy";
    }


    //查询药品仓库
    @RequestMapping("selecthuishou")
    public Object selecthuishou(Huishou huishou, Integer page, Integer limit) {
        System.out.print("进去查询药房方法");
        PageHelper.startPage(page, limit);
        List<Huishou> drugstores = pharmacyService.selhuishou(huishou);
        PageInfo pageInfo = new PageInfo(drugstores);
        Map<String, Object> drugstoresData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式
        drugstoresData.put("code", 0);
        drugstoresData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        drugstoresData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        drugstoresData.put("data", pageInfo.getList());
        return drugstoresData;
    }

    @RequestMapping("delhuishou")
    public Integer delhuishou(Huishou huishou, Record record) {
        //删除回收表此药（处理）
        System.out.println("进入处理");
        int delhuishou = pharmacyService.delhuishou(huishou);
        if (delhuishou == 1) {
            System.out.print("添加记录表");
            int addjilu = rs.addRecord(record);//添加一条记录
        }

        return delhuishou;

    }

    //    门诊取药
//查询所有患者信息
    @RequestMapping("tselpreson")
    public Object tselperson(Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<ReportVo> sel = cTakeService.sel();
        PageInfo pageInfo = new PageInfo(sel);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //修改用户状态
    @RequestMapping("chuku")
    public Object chuku(ReportVo reportVo) {
//        Integer chuku = cTakeService.chuku(reportVo);
//        return chuku;
        return null;
    }

    //进入查看患者页面
    @RequestMapping("haun")
    public Object haun() {

        return "cao/chuanzhe";
    }

    //查看患者信息
    @RequestMapping("selhuan")
    public Object selhuan(ReportVo reportVo, Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<ReportVo> selhuan = cTakeService.selhuan(reportVo);
        PageInfo pageInfo = new PageInfo(selhuan);
        Map<String, Object> tableData = new HashMap<String, Object>();
//        这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查看该用户的总价格
    @RequestMapping("zong")
    public Object zong(Integer reid) {
//        int zong = cTakeService.zong(reid);
//        return zong;
        return null;
    }

    //    Cashier
// 门诊收费
//进入处方页面
    @RequestMapping("cc")
    public Object look(Model model) {
        //查询所有药房
        List<CWarehuose> selware = cCashierService.selPharmacy();
        model.addAttribute("selware", selware);
        return "cao/cashier";
    }

    //查询所有患者信息
    @RequestMapping("selpreson")
    public Object selperson(Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<ReportVo> sel = cCashierService.selAll();
        PageInfo pageInfo = new PageInfo(sel);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查询药品所有信息
    @RequestMapping("seldrug")
    public Object seldrug(String durgname, Integer page, Integer limit, CPharmacy cPharmacy) {
        cPharmacy.setPharmacyName(durgname);
        PageHelper.startPage(page, limit);
//        List<CPharmacy> selpharm = cCashierService.selpharm(cPharmacy);
//        PageInfo pageInfo = new PageInfo(selpharm);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
//        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
//        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查询处方中是否有这个药
    @RequestMapping("selchu")
    public Object seslchu(CCashier cCashier, Integer reid, String mename) {
        cCashier.setReportId(reid);//把用户id存入数据库
        cCashier.setDurgname(mename);//把药品名称存入实体类
        Integer selcadr = cCashierService.selPrescription(cCashier);
        return selcadr;
    }

    //添加处方药品
    @RequestMapping("addchu")
    public Object addchu(CCashier cCashier, CPharmacy cPharmacy) {
        //向处方添加药品
        Integer addchu = cCashierService.addchu(cCashier);
        String pharmacyName = cCashier.getDurgname();
        cPharmacy.setPharmacyName(pharmacyName);
        //减少药房中的数量
        Integer deldrunum = cCashierService.deldrunum(cPharmacy);
        return addchu;
    }

    //查询该用户的处方
    @RequestMapping("selpepi")
    public Object selpepi(Integer perid, Integer page, Integer limit) {
        List<CCashier> selpepi = cCashierService.selpepi(perid);
        PageHelper.startPage(page, limit);
        PageInfo pageInfo = new PageInfo(selpepi);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //删除处方中的药品
    @RequestMapping("del")
    public Object del(CCashier cCashier, String durnme, Integer durnum, CPharmacy cPharmacy) {
        Integer del = cCashierService.del(cCashier);
        cPharmacy.setPharmacyName(durnme);
        cPharmacy.setDrugstorenum(durnum);
        cCashierService.adddrunum(cPharmacy);
        if (del == 0) {
            return "删除失败";
        } else {
            return "删除成功";
        }
    }

    //如果处方中有该药品则修改该药品的数量和价钱
    @RequestMapping("updchu")
    public Object updchu(CCashier cCashier, CPharmacy cPharmacy) {
        //修改处方中药品的数量
        Integer updchu = cCashierService.upchu(cCashier);
        String pharmacyName = cCashier.getDurgname();
        cPharmacy.setPharmacyName(pharmacyName);
        //修改仓库中药品的数量
        Integer deldrunum = cCashierService.deldrunum(cPharmacy);
        return updchu;
    }

    //模糊查询
    @RequestMapping("mohu")
    public Object mohu(String durgname, ReportVo reportVo, Integer page, Integer limit) {
        reportVo.setReportName(durgname);
        PageHelper.startPage(page, limit);
        List<ReportVo> mohu = cCashierService.fuzzyQuery(reportVo);  /// n
        PageInfo pageInfo = new PageInfo(mohu);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //添加用户病因
    @RequestMapping("addbing")
    public Object addbing(Integer reid, String bing, CReport cReport) {
        cReport.setZhuan(bing);
        cReport.setReportId(reid);
        Integer addbing = cCashierService.addbing(cReport);
        return addbing;
    }

    //查询用户有没有填写病因
    @RequestMapping("selbing")
    public Object selbing(Integer reid) {
        String selbing = cCashierService.selbing(reid);
        return selbing;
    }

    //查看用户的检查结果
    @RequestMapping("lookbing")
    public Object lookbing(Integer reid) {
        String lookbing = cCashierService.inspectionResults(reid);
        return lookbing;
    }

    //查看该用户是否还有未交钱的项目
    @RequestMapping("seljiao")
    public Object seljiao(Integer reid) {
        int seljiao = cCashierService.paya(reid);
        return seljiao;
    }

    //查询该用户所有的处方
    @RequestMapping("selall")
    public Object selall(Integer perid, Integer page, Integer limit) {
        List<CCashier> selall = cCashierService.selAllPrescription(perid);
        PageHelper.startPage(page, limit);
        PageInfo pageInfo = new PageInfo(selall);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查询用户所有的项目处方
    @RequestMapping("selximu")
    public Object selximu(Integer perid, Integer page, Integer limit) {
        List<CCashier> selximu = cCashierService.selAllPrescription(perid);
        PageHelper.startPage(page, limit);
        PageInfo pageInfo = new PageInfo(selximu);
        Map<String, Object> tableData = new HashMap<String, Object>();
        //这是layui要求返回的json数据格式，如果后台没有加上这句话的话需要在前台页面手动设置
        tableData.put("code", 0);
        tableData.put("msg", "");
        //将全部数据的条数作为count传给前台（一共多少条）
        tableData.put("count", pageInfo.getTotal());
        //将分页后的数据返回（每页要显示的数据）
        tableData.put("data", pageInfo.getList());
        return tableData;
    }

    //查看该用户是否有缴费未做的项目
    @RequestMapping("selwei")
    public Object selwei(Integer reid) {
        //查询该用户有几个做过的项目
        Integer selyi = cCashierService.selyi(reid);
        //查询该用户有几个缴费的项目
        Integer selgong = cCashierService.pay(reid);
        if (selyi == selgong) {
            return 1;
        } else {
            return 0;
        }
    }
}
